package beans;

import entidades.Processo;
import entidades.Usuario;
import excessoes.DAOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import rn.ProcessoRN;
import rn.VolumeProcessoRN;
import util.ContextoUtil;
import util.FacesUtil;
import entidades.VolumeProcesso;
/**
 *
 * @author Marcelo Gomes Neto
 */
@ManagedBean(name="volumeProcessoBean")
@ViewScoped
public class VolumeProcessoBean implements Serializable 
{
    private static final long serialVersionUID = 1410830645186526549L;
    private VolumeProcesso volumeProcesso = new VolumeProcesso();
    private ContextoBean contextoBean = ContextoUtil.getContextoBean();
    private List<VolumeProcesso> listarVolume;
    private List<VolumeProcesso> listarVolumesPorProcesso;
    private List<VolumeProcesso> listarVolumesNoSetor;
    private List<VolumeProcesso> listarVolumesPorStatus;
    private Integer filtroSelecionado;
    private Integer processoSelecionado;
    private String numeroPag; //variável criada para exibir no HEADER da tabela de volumes
    private Boolean trataBotao = true;
    private int status; //Habilita ou desabilita os botões de incluir e excluir volume conforme status do processo
    
    public void prepararAdicionarVolume(ActionEvent actionEvent) {
        this.volumeProcesso = new VolumeProcesso();
    }
    
    public String incluirVolume() throws DAOException, Exception 
    {
        Usuario usuario = this.contextoBean.getUsuarioLogado();
        VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
        Integer qtdeVolumes = this.listarVolumesPorProcesso.size();
        
        ProcessoRN processoRN = new ProcessoRN();
        Processo processo = processoRN.carregarProcesso(this.processoSelecionado);
        this.volumeProcesso.setProcesso(processo);
                
        if(qtdeVolumes >= 1) 
        {
            this.setTrataBotao(true);
            this.volumeProcesso.setVolume(qtdeVolumes+1);
            volumeProcessoRN.incluirVolume(this.volumeProcesso, usuario);
        }
        return null;
    }
        
    public String excluirVolume() throws Exception
    {
        Usuario usuario = this.contextoBean.getUsuarioLogado();
        VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
        Integer qtdeVolumes = this.listarVolumesPorProcesso.size();
                
        if(qtdeVolumes <= 1 || qtdeVolumes == null) {
            this.setTrataBotao(false);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Não é possível excluir o volume 1!", ""));
        }
        else 
        {
            this.volumeProcesso = this.listarVolumesPorProcesso.remove(qtdeVolumes-1);
            volumeProcessoRN.excluirVolume(this.volumeProcesso, usuario);
        }
        return null;
    }

    public List<VolumeProcesso> getListarVolume() 
    {
        /*
        VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
        
        if((this.listarVolume == null) && (this.dataIni == null || this.dataFim == null)) {
           this.setListar(processoRN.listar());
        }
        if((this.listar != null) && (this.dataIni != null || this.dataFim != null)) {
            this.setListar(processoRN.listarProcessoPorPeriodo(dataIni, dataFim));
        }
        if((this.listar != null) && (this.dataIni == null || this.dataFim == null)) {
           this.setListar(processoRN.listar());
        }
        * */
        if(this.listarVolume == null)
        {
            VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
            this.setListarVolume(volumeProcessoRN.listarVolume());
        }
        return this.listarVolume;
    }

    public void setListarVolume(List<VolumeProcesso> listarVolume) {
        this.listarVolume = listarVolume;
    }

    public VolumeProcesso getVolumeProcesso() {
        return volumeProcesso;
    }

    public void setVolumeProcesso(VolumeProcesso volumeProcesso) {
        this.volumeProcesso = volumeProcesso;
    }
    /*
    public VolumeProcess carregaSetorUsuario(ValueChangeEvent event) 
    {
        Integer setorUsuario = (Integer) event.getNewValue(); 
        SetorRN volumeProcessoRN = new SetorRN();
        return volumeProcessoRN.carregaSetorPorOm(this.processoSelecionado, setorUsuario);

    }
    */
    public List<VolumeProcesso> getListarVolumesPorProcesso() 
    {
        if(this.processoSelecionado != null)
        {
            VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
            this.setListarVolumesPorProcesso(volumeProcessoRN.listarVolumesPorProcesso(this.processoSelecionado));
        }
        return listarVolumesPorProcesso;
    }

    public void setListarVolumesPorProcesso(List<VolumeProcesso> listarVolumesPorProcesso) {
        this.listarVolumesPorProcesso = listarVolumesPorProcesso;
    }

    public Integer getProcessoSelecionado() {
        return processoSelecionado;
    }

    public void setProcessoSelecionado(Integer processoSelecionado) {
        this.processoSelecionado = processoSelecionado;
    }

    public String getNumeroPag() 
    {
        try 
        {
            if(this.processoSelecionado != null)
            {
                ProcessoRN processoRN = new ProcessoRN();
                Processo processo = processoRN.carregarProcesso(this.processoSelecionado);
                String numPag = processo.getPag();
                this.setNumeroPag(numPag);
            }
        } 
        catch (Exception ex) {
            Logger.getLogger(VolumeProcessoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return numeroPag;
    }

    public void setNumeroPag(String numeroPag) {
        this.numeroPag = numeroPag;
    }

    public Boolean getTrataBotao() {
        return trataBotao;
    }

    public void setTrataBotao(Boolean trataBotao) {
        this.trataBotao = trataBotao;
    }

    // Lista Volumes Ativos no Setor (status = 1)
    public List<VolumeProcesso> getListarVolumesNoSetor() 
    {
        Usuario usuario = contextoBean.getUsuarioLogado();
        Integer unidadeUsuario = usuario.getPessoa().getUnidade();
        Integer setorUsuario = usuario.getPessoa().getSetor();
        
        if(unidadeUsuario != null && setorUsuario != null)
        {
            VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
            this.setListarVolumesNoSetor(volumeProcessoRN.listarVolumesNoSetor(unidadeUsuario, setorUsuario));
        }
        return listarVolumesNoSetor;
    }

    public void setListarVolumesNoSetor(List<VolumeProcesso> listarVolumesNoSetor) {
        this.listarVolumesNoSetor = listarVolumesNoSetor;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public List<VolumeProcesso> getListarVolumesPorStatus() 
    {
        VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
        if (this.filtroSelecionado != null) {
            this.setListarVolumesPorStatus(volumeProcessoRN.listarVolumesPorStatus(this.filtroSelecionado));
        }
        return listarVolumesPorStatus;
    }

    public void setListarVolumesPorStatus(List<VolumeProcesso> listarVolumesPorStatus) {
        this.listarVolumesPorStatus = listarVolumesPorStatus;
    }

    public Integer getFiltroSelecionado() {
        return filtroSelecionado;
    }

    public void setFiltroSelecionado(Integer filtroSelecionado) {
        this.filtroSelecionado = filtroSelecionado;
    }
}